package com.example.feign;

import com.example.bean.Product;
import com.example.feign.fallback.factory.ProductServiceFallBackFactory;
import com.example.shoputils.resp.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @Author 刘武贵
 * @Date 2024-03-02 23:34
 * @Description 功能描述：调用商品微服务的接口（feign调用）
 */
//@FeignClient(value = "server-product")
//@FeignClient(value = "server-product", fallback = ProductServiceFallBack.class)
/**
 * fallbackFactory = ProductServiceFallBackFactory.class 指定容错类
 * 使用Sentinel实现服务容错时，fallback和fallbackFactory只能使用其中一种方式实现服务容错，二者不能同时使用。
 */
@FeignClient(value = "server-product", fallbackFactory = ProductServiceFallBackFactory.class)
public interface ProductService {
    /**
     * 获取商品信息
     *
     * @param pid 商品ID，路径变量。
     * @return 返回对应的商品对象。
     */
    @GetMapping(value = "/product/get/{pid}")
    Product getProduct(@PathVariable("pid") Long pid);

    /**
     * 更新库存数量
     *
     * @param pid 商品的ID，通过路径变量传递。
     * @param count 需要更新的商品数量，通过路径变量传递。
     * @return 返回操作结果，包括操作是否成功和更新后的数量。
     */
    @GetMapping(value = "/product/update_count/{pid}/{count}")
    Result<Integer> updateCount(@PathVariable("pid") Long pid, @PathVariable("count") Integer count);
}
